package top.kaoshanji.p2ch23a;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * author kaoshanji
 * ^_^
 * create time 2025/3/3 10:43
 */
public class GeneralInvocationHandler implements InvocationHandler {

    private Object realObj;

    public GeneralInvocationHandler(Object realObj) {
        this.realObj = realObj;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

        // 所有对象的方法都会执行的逻辑1
        System.out.println("entering " + realObj.getClass().getSimpleName() + ":" + method.getName());

        // 方法调用的结果是不是可以根据需要改一改呢？
        Object result = method.invoke(realObj, args);

        // 所有对象的方法都会执行的逻辑2
        System.out.println("leaving " + realObj.getClass().getSimpleName() + ":" + method.getName());
        // return "我是靓仔";
        // 可以根据需要定义方法的返回结果，前提是方法的返回类型不是 void
        return result;
    }
}
